package unq.persistencia;

/**
 * TODO: description
 */
public class PartidoDeCopa extends Partido {

    private Partido partidoDeida;

    private Partido partidoDevuelta;

    private int penalesEquipoUno;

    private int penalesEquipoDos;

    private Equipo equipoPerdedor;

    public Equipo getEquipoPerdedor() {
        return this.equipoPerdedor;
    }

    public void setEquipoPerdedor(final Equipo equipoPerdedor) {
        this.equipoPerdedor = equipoPerdedor;
    }

    public PartidoDeCopa(final Partido partidoIda, final Partido partidoVuelta, final int pEq1, final int pEq2) {
        this.partidoDeida = partidoIda;
        this.partidoDevuelta = partidoVuelta;
        this.penalesEquipoUno = pEq1;
        this.penalesEquipoDos = pEq2;
        this.setLocal(partidoIda.getLocal());
        this.setVisitante(partidoVuelta.getVisitante());
        this.setPrimerEquipo(partidoIda.getPrimerEquipo());
        this.setSegundoEquipo(partidoIda.getSegundoEquipo());
        this.setGolesPrimerEquipo(partidoIda.getGolesPrimerEquipo() + partidoVuelta.getGolesSegundoEquipo());
        this.setGolesSegundoEquipo(partidoIda.getGolesSegundoEquipo() + partidoVuelta.getGolesPrimerEquipo());
        this.setGanador(this.equipoGanador());
    }

    public PartidoDeCopa() {

    }

    public Partido getPartidoDeida() {
        return this.partidoDeida;
    }

    public void setPartidoDeida(final Partido partidoDeida) {
        this.partidoDeida = partidoDeida;
    }

    public Partido getPartidoDevuelta() {
        return this.partidoDevuelta;
    }

    public void setPartidoDevuelta(final Partido partidoDevuelta) {
        this.partidoDevuelta = partidoDevuelta;
    }

    public int getPenalesEquipoUno() {
        return this.penalesEquipoUno;
    }

    public void setPenalesEquipoUno(final int penalesEquipoUno) {
        this.penalesEquipoUno = penalesEquipoUno;
    }

    public int getPenalesEquipoDos() {
        return this.penalesEquipoDos;
    }

    public void setPenalesEquipoDos(final int penalesEquipoDos) {
        this.penalesEquipoDos = penalesEquipoDos;
    }

    public Partido getIda() {
        return this.partidoDeida;
    }

    public void setIda(final Partido ida) {
        this.partidoDeida = ida;
    }

    public Partido getVuelta() {
        return this.partidoDevuelta;
    }

    public void setVuelta(final Partido vuelta) {
        this.partidoDevuelta = vuelta;
    }

    public Equipo primerEquipo() {
        return this.primerEquipo;
    }

    public Equipo segundoEquipo() {
        return this.segundoEquipo;
    }

    public Equipo equipoGanador2() {
        Equipo ganadorPartidoIda = this.getPartidoDeida().equipoGanador();
        Equipo ganadorPartidoVuelta = this.getPartidoDevuelta().equipoGanador();
        if (ganadorPartidoIda == ganadorPartidoVuelta && ganadorPartidoIda != null || ganadorPartidoIda != null
                && ganadorPartidoVuelta == null) {
            return ganadorPartidoIda;
        } else {
            if (ganadorPartidoIda == null && ganadorPartidoVuelta == null) {
                return this.ganadorPorPenales();
            } else {
                return ganadorPartidoVuelta;
            }
        }

    }

    @Override
    public Equipo equipoGanador() {
        if (this.getPartidoDeida().getGolesLocal() + this.getPartidoDevuelta().getGolesLocal() > this.getPartidoDeida()
                .getGolesVisitante() + this.getPartidoDevuelta().getGolesVisitante()) {
            return this.getLocal();
        } else {
            Equipo ganador = this.ganadorPorPenales();
            return ganador;
        }

    }

    private Equipo ganadorPorPenales() {
        if (this.getPenalesEquipoUno() >= this.getPenalesEquipoDos()) {
            return this.getLocal();
        } else {
            return this.getVisitante();
        }
    }

}
